﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace BitPongTetrisTestGenerator
{
    class BitPongTetrisTestGenerator
    {
        static void Main()
        {
            GenerateTest(
@"....
.*..
.*..
.*..
....
....
....
....
....
....
....
....
**.*
**.*
**.*
*..*
",
-1,
"test.000.001.in.txt");

            GenerateTest(
@"....
..*.
..*.
..**
....
....
....
....
....
....
....
....
....
....
....
....
",
 -1,
 "test.001.in.txt");

            GenerateTest(
@"....
..*.
..*.
..**
....
....
....
....
....
....
....
....
**..
.*..
**..
****
",
1,
"test.002.in.txt");

            GenerateTest(
@"....
..*.
..*.
.***
....
....
....
....
....
....
....
....
**..
.*..
**..
***.
",
1,
"test.003.in.txt");

            GenerateTest(
@"....
..*.
..*.
....
....
....
....
....
....
....
.*..
....
....
....
....
....
",
-1,
"test.004.in.txt");

            GenerateTest(
@"....
..*.
..*.
....
....
....
....
....
....
....
.*..
....
...*
.**.
.***
..*.
",
-1,
"test.005.in.txt");

            GenerateTest(
@"....
..**
..*.
..*.
....
....
....
....
....
....
**..
.*..
**.*
.**.
.***
..*.
",
-1,
"test.006.in.txt");

            GenerateTest(
@"....
..**
..*.
..*.
....
....
....
....
....
....
**..
.*..
**.*
.**.
.***
..*.
",
0,
"test.007.in.txt");

            GenerateTest(
@"....
.***
....
....
....
....
....
....
*...
....
....
....
....
*...
*...
*..*
",
1,
"test.008.in.txt");

            GenerateTest(
@"****
.***
****
****
****
****
****
****
*...
****
****
****
****
****
****
****
",
1,
"test.009.in.txt");

            GenerateTest(
@".***
.***
.***
.***
.***
.***
.***
.***
*...
****
****
****
****
****
****
****
",
-1,
"test.010.in.txt");
        }

        private static void GenerateTest(string startField, int dx, string testName)
        {
            using (StreamWriter writer = new StreamWriter(testName))
            {
                string[] rows = startField.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

                const int Columns = 4;
                short[] columns = new short[Columns];
                for (int row = 0; row < rows.Length; row++)
                {
                    for (int col = 0; col < Columns; col++)
                    {
                        if (rows[row][col] == '*')
                        {
                            columns[col] |= (short)(1 << row);
                        }
                    }
                }

                for (int column = 0; column < Columns; column++ )
                {
                    writer.WriteLine(columns[column]);
                }
                writer.WriteLine(dx);
            }
        }
    }
}
